Metadados do artigo aceito para publicação na RSP
Carregar pacotes
Definir funções
Definir temas
# limpar enviroment
rm(list = ls())
# options
options(scipen = 999)
# Instalar pacote para quem não o tem
#install.packages("pacman")
pacman::p_load(tidyverse, readxl, janitor, sjPlot,
scales, DataExplorer, DT, gridExtra,
viridis, corrpolot, VGAM, geobr, ggthemes)
# A funcao carrega dois objetos:
# 1 - O dicionário da Munic, contido na primeira aba do excel;
# 2 - Os dados das Munics contidos em todas as demais abas, unidos por "A1"
carregar_munics <- function(link_da_munic, ano){
# definir diretório e arquivo temporário
wd_origin <- getwd()
temp_dir <- tempdir()
setwd(temp_dir)
file.remove(list.files(path = temp_dir))
temp_file <- tempfile(tmpdir = temp_dir)
# Criar lista para armazenar arquivos
Munic_list <- list()
# Download da Munic
download.file(url = link_da_munic, destfile = temp_file)
# unizip
unzip(temp_file)
# remover temporário
file.remove(temp_file)
# selecionar o arquivo xls
file.xls <- list.files(pattern = "xls")
# Nome da Munic
Munic <- paste0("Munic_", ano)
# Carregar todas as abas do excel
Munic <- file.xls %>%
excel_sheets() %>%
set_names() %>%
map(read_excel, path = file.xls)
# remover arquivo xls da pasta temporaria
file.remove(file.xls)
# Nome do dicionario
dic <- paste0("dic_", ano)
# selecionar dicionário
dic <- Munic[[1]]
# excluir dicionário
Munic[[1]] <- NULL
# Mesclar todas as abas do excel
Munic <- Munic %>%
reduce(full_join, by = "A1")
# Criar nome da lista
list <- paste0("list_", Munic)
# criar lista com dicionário e Munic
list <- list(dic, Munic)
# retornar ao diretório orginal
setwd(wd_origin)
# retornar objeto list com dicionário e Munics
return(list)
}
########################################
# Munic 2014
Munic_14_link <- "ftp://ftp.ibge.gov.br/Perfil_Municipios/2014/base_MUNIC_xls_2014.zip"
Munic_14 <- carregar_munics(link_da_munic = Munic_14_link,
ano = 2014)
Munic_dic_14 <- Munic_14[[1]]
Munic_14 <- Munic_14[[2]]
########################################
# Munic 2013 - Suplementar
Munic_13sup_link <- "ftp://ftp.ibge.gov.br/Perfil_Municipios/Assistencia_Social_2013/xls/base_assist_social_2013.zip"
Munic_13 <- carregar_munics(link_da_munic = Munic_13sup_link,
ano = 2013)
Munic_dic_13 <- Munic_13[[1]]
Munic_13 <- Munic_13[[2]]
########################################
# Munic 2015
Munic_15_link <- "ftp://ftp.ibge.gov.br/Perfil_Municipios/2015/Base_de_Dados/Base_MUNIC_2015_xls.zip"
Munic_15 <- carregar_munics(link_da_munic = Munic_15_link,
ano = 2015)
Munic_dic_15 <- Munic_15[[1]]
Munic_15 <- Munic_15[[2]]
########################################
# Pib
pib_link <- "ftp://ftp.ibge.gov.br/Pib_Municipios/2017/base/base_de_dados_2010_2017_xls.zip"
temp_dir <- tempdir()
#
temp_file2 <- tempfile(tmpdir = temp_dir)
# download
download.file(url = pib_link, destfile = temp_file2)
#unzip
unzip(temp_file2)
# selecionar arquivo
file.xls <- list.files(pattern = "xls")
pib <- rio::import(file.xls)
file.remove(file.xls)
########################################
# Carregar dados do idh-m
idhm_link <- "http://atlasbrasil.org.br/2013/data/rawData/atlas2013_dadosbrutos_pt.xlsx"
idhm <- rio::import(idhm_link, sheet = 2)
#idhm <- read_excel("idh_census.xlsx", sheet = 2)
########################################
# base de códigos IBGE
#cod <- read_excel("codigos.xlsx") %>%
# dplyr::select(1:2)
# Uso privado para configurações
setwd("C:/r_files/my_academic_projects/capacidades/capacitties")
#save.image("capacities_raw_data.RData")
load("capacities_raw_data.RData")
###########################################
# Munic 2014 - saúde e educação
index_14 <- c("A263", # Conselho de Saúde
"A271", # Fundo de Saúde
"A273", # Plano de Saúde
"A251", # Secretaria de Saúde
"A256", # Servidores da Saúde
"A207", # Conselho de Educação
"A224", # Conselho do Fundeb, proxy para o fundo
"A203", # Plano de Educação
"A157", # Secretaria de Educação
"A167", # Servidores da Educação
#"A392", # Secretaria Direitos Humanos
#"A545", # Fundo Direitos Humanos
#"A410", # Plano Direitos Humanos
#"A442", # Conselho Direitos Humanos
"A2", # Total de servidores do Municipio
"A12", # Total com ensino Superior
"A13") # Total com pós-graduação
Munic_14_sel <- Munic_14 %>%
dplyr::select(A1,
A1022:A1029, # região, população e porte
index_14)
###########################################
#Munic 2013 - Assistência Social
index_13 <- c("A1",
"A199", # Conselho da Assit. Social
"A230", # Fundo da Assist. Social
"A149", # Plano da Assist. Social
"A2", # Secretaria de Assist. Social
"A39") # Servidores da Assist. Social
Munic_13_sel <- Munic_13 %>%
dplyr::select(index_13)
###########################################
# Munic 2015 - consórcios
index_15 <- c("A1",
"A151", # Consórcio de Educação
"A152", # Intermunicipal
"A153", # Estadual
"A154", # Federal
"A155", # Consórcio de Saúde
"A156", # Intermunicipal
"A157", # Estadual
"A158", # Federal
"A159", # Consórcio de Assist. Social
"A160", # Intermunicipal
"A161", # Estadual
"A162") # Federal
Munic_15_sel <- Munic_15 %>%
dplyr::select(index_15)
###########################################
# PIB - 2014
pib <- clean_names(pib)
pib_sel <- pib %>% #glimpse()
filter(ano == 2014) %>%
select(A1 = codigo_do_municipio, ano,
pib_total = produto_interno_bruto_a_precos_correntes_r_1_000,
pib_per_cap = produto_interno_bruto_per_capita_a_precos_correntes_r_1_00)%>%
arrange(desc(pib_per_cap))
###########################################
# IDH-M - 2010
idhm_sel <- idhm %>%
dplyr::select(A1 = Codmun7, ANO, IDHM) %>%
filter(ANO==2010) %>%
arrange(desc(IDHM))
# garantir que os códigos são caracter
Munic_13_sel$A1 <- as.character(Munic_13_sel$A1)
Munic_15_sel$A1 <- as.character(Munic_15_sel$A1)
Munic_14_sel$A1 <- as.character(Munic_14_sel$A1)
pib_sel$A1 <- as.character(pib_sel$A1)
idhm_sel$A1 <- as.character(idhm_sel$A1)
# Criar variavel com código de 6 digitos para mesclar com a Munic 2013 e mesclar todas as Munics
capacities <- Munic_14_sel %>%
mutate(A1a = str_sub(A1,start = 1, end = 6)) %>%
select(A1, A1a, everything()) %>%
full_join(Munic_13_sel, by = c("A1a"="A1")) %>%
full_join(Munic_15_sel, by = c("A1"="A1"))
# Mesclar pib e idhm
capacities <- capacities %>%
full_join(pib_sel) %>%
full_join(idhm_sel)
capacities %>% head(10)
# capacities <- capacities %>%
# dplyr::select(A1, A1022, A1024:A1029, A251, A2.y, A157.x, A273, A149, A203, A271, A230, A224, A263, A199, A207, A256, A39, A167, A151:A162, A12, A13, A2.x, ano:IDHM)
# Excluídos direitos humanos = A392;A410; A545, A442,
###################################################
capacities <- capacities %>%
select(cod_mun = A1,
nm_mun = A1027,
populacao = A1028,
faixa_pop = A1029,
cod_est = A1022,
nm_est = A1025,
sg_est = A1026,
regiao = A1024,
# Secretarias
sc_sa = A251,
sc_as = A2.y,
sc_ed = A157.x,
# Planos
pl_sa = A273,
pl_as = A149,
pl_ed = A203,
# Fundos
fu_sa = A271,
fu_as = A230,
fu_ed = A224,
# Conselhos
chl_sa = A263,
chl_as = A199,
chl_ed = A207,
# Servidores
ser_sa = A256,
ser_as = A39,
ser_ed = A167,
# Consórciso
consor_ed = A151,
#consor_ed_mun = A152 ,
#consor_ed_est = A153,
#consor_ed_un = A154,
consor_sa = A155,
#consor_sa_mun = A156,
#consor_sa_est = A157.y,
#consor_sa_un = A158,
consor_as = A159,
#consor_as_mun = A160,
#consor_as_est = A161,
#consor_as_un = A162,
pib_total = pib_total,
pib_per_cap = pib_per_cap,
ano_pib = ano,
idhm = IDHM,
ano_idhm = ANO)
# Verificar existência de NAs
DataExplorer::plot_missing(capacities)
# NA - presentes apenas nos IDHM
# Excluir NA's
# Removidos 5 municipios não criados até 2010, portante sem o IDHM para esse ano.
capacities <- capacities %>%
drop_na(idhm)
DataExplorer::plot_missing(capacities)
capacities_1 <- capacities
Podem ser baixados em formato excel ou csv
Legenda:
capacities_1 %>%
datatable(extensions = 'Buttons',
rownames = F,
options = list(dom = 'Blfrtip',
buttons = c('csv', 'excel'),
autoFill = TRUE,
fixedHeader = TRUE,
autowidth = TRUE,
paging = F,
scrollX = TRUE,
scrollY = "400px"))
# Uso privado para configurações
# setwd("C:/r_files/my_academic_projects/capacidades/capacitties")
# save.image("capacities_raw_data.RData")
# load("capacities_raw_data.RData")
De 5.565 mun. passamos a trabalhar com 4.917 (88%)
capacities_2 <- capacities_1 %>%
filter(populacao <= 50000) %>%
mutate(faixa_pop = faixa_pop %>% as.factor())
# Not run
# capacities_2$faixa_pop
character_col <- c("cod_mun", "nm_mun")
factor_col <- c("cod_est", "nm_est", "sg_est","faixa_pop", "regiao", "sc_sa", "sc_as", "sc_ed", "pl_sa", "pl_as", "pl_ed", "fu_sa", "fu_as", "fu_ed", "chl_sa", "chl_as", "chl_ed", "consor_ed", "consor_ed", "consor_sa", "consor_as")
numeric_col <- c("populacao", "ser_sa", "ser_as", "ser_ed", "pib_total", "pib_per_cap", "ano_pib", "idhm","ano_idhm")
capacities_2 <- capacities_2 %>%
mutate_at(character_col, as.character) %>%
mutate_at(factor_col, as.factor) %>%
mutate_at(numeric_col, as.numeric)
Quando numéricas: valores mínimos, máximos, média, mediana etc.
Quando categóricos: categorias e quantidade de cada uma
Quando character: quantidade de valores únicos
capacities_2 <- as_tibble(capacities_2)
summary(capacities_2)
## cod_mun nm_mun populacao
## Length:4917 Length:4917 Min. : 822
## Class :character Class :character 1st Qu.: 4967
## Mode :character Mode :character Median :10008
## Mean :13312
## 3rd Qu.:18595
## Max. :49963
##
## faixa_pop cod_est nm_est
## 1 - Até 5000 :1242 31 : 785 Minas Gerais : 785
## 2 - 5001 até 10000 :1214 35 : 512 São Paulo : 512
## 3 - 10001 até 20000:1381 43 : 453 Rio Grande do Sul: 453
## 4 - 20001 até 50000:1080 29 : 370 Bahia : 370
## 41 : 364 Paraná : 364
## 42 : 265 Santa Catarina : 265
## (Other):2168 (Other) :2168
## sg_est regiao
## MG : 785 1 - Norte : 379
## SP : 512 2 - Nordeste :1611
## RS : 453 3 - Sudeste :1419
## BA : 370 4 - Sul :1082
## PR : 364 5 - Centro-Oeste: 426
## SC : 265
## (Other):2168
## sc_sa
## Não informado : 2
## Órgão da administração indireta : 4
## Recusa : 1
## Secretaria municipal em conjunto com outras políticas: 366
## Secretaria municipal exclusiva :4417
## Setor subordinado a outra secretaria : 10
## Setor subordinado diretamente à chefia do Executivo : 117
## sc_as
## Fundação pública : 3
## Não possui estrutura : 2
## Recusa : 1
## Secretaria municipal em conjunto com outras políticas: 963
## Secretaria municipal exclusiva :3727
## Setor subordinado a outra secretaria : 82
## Setor subordinado diretamente à chefia do Executivo : 139
## sc_ed
## Não informado : 1
## Órgão da administração indireta : 2
## Recusa : 1
## Secretaria municipal em conjunto com outras políticas:1983
## Secretaria municipal exclusiva :2751
## Setor subordinado à outra secretaria : 9
## Setor subordinado diretamente à chefia do Executivo : 170
## pl_sa pl_as pl_ed fu_sa
## Não : 122 Não : 286 Não :2852 Não : 4
## Não informado: 3 Recusa: 1 Não informado: 3 Não informado: 3
## Recusa : 1 Sim :4630 Recusa : 1 Recusa : 1
## Sim :4791 Sim :2061 Sim :4909
##
##
##
## fu_as fu_ed chl_sa chl_as
## Não : 31 Não : 72 Não : 10 Não : 5
## Recusa: 1 Não informado: 3 Não informado: 2 Recusa: 1
## Sim :4885 Recusa : 1 Recusa : 1 Sim :4911
## Sim :4841 Sim :4904
##
##
##
## chl_ed ser_sa ser_as ser_ed
## Não : 666 Min. : 1.0 Min. : 0.000 Min. : 0.0
## Não informado: 3 1st Qu.: 61.0 1st Qu.: 2.000 1st Qu.: 94.0
## Recusa : 1 Median : 100.0 Median : 5.000 Median : 179.0
## Sim :4247 Mean : 135.7 Mean : 8.559 Mean : 267.4
## 3rd Qu.: 179.0 3rd Qu.: 11.000 3rd Qu.: 364.0
## Max. :1253.0 Max. :180.000 Max. :2460.0
## NA's :50 NA's :11 NA's :29
## consor_ed consor_sa consor_as
## Não :4594 Não :2396 Não :4513
## Não informado: 1 Não informado: 1 Não informado: 1
## Recusa : 1 Recusa : 1 Recusa : 1
## Sim : 321 Sim :2519 Sim : 402
##
##
##
## pib_total pib_per_cap ano_pib idhm
## Min. : 11715 Min. : 3082 Min. :2014 Min. :0.4180
## 1st Qu.: 58829 1st Qu.: 7491 1st Qu.:2014 1st Qu.:0.5940
## Median : 119973 Median : 12951 Median :2014 Median :0.6570
## Mean : 238100 Mean : 17625 Mean :2014 Mean :0.6521
## 3rd Qu.: 251339 3rd Qu.: 21434 3rd Qu.:2014 3rd Qu.:0.7100
## Max. :11915834 Max. :815698 Max. :2014 Max. :0.8540
##
## ano_idhm
## Min. :2010
## 1st Qu.:2010
## Median :2010
## Mean :2010
## 3rd Qu.:2010
## Max. :2010
##
# capacities_2[which(capacities_2$consor_as == "Recusa"), ]
# cod_mun nm_mun cod_est nm_est sg_est populacao
# <chr> <chr> <fct> <fct> <fct> <dbl>
# 1 4110508 Ipira~ 41 Paraná PR 14895
# Filtrar 1 municipio com recusa para todas as variáveis
capacities_2 <- filter(capacities_2, consor_as != "Recusa")
Operação em dois passos
# verificar labels
unique(capacities_2$sc_sa)
## [1] Secretaria municipal exclusiva
## [2] Setor subordinado diretamente à chefia do Executivo
## [3] Secretaria municipal em conjunto com outras políticas
## [4] Setor subordinado a outra secretaria
## [5] Recusa
## [6] Não informado
## [7] Órgão da administração indireta
## 7 Levels: Não informado Órgão da administração indireta ... Setor subordinado diretamente à chefia do Executivo
unique(capacities_2$sc_ed)
## [1] Secretaria municipal exclusiva
## [2] Secretaria municipal em conjunto com outras políticas
## [3] Setor subordinado diretamente à chefia do Executivo
## [4] Órgão da administração indireta
## [5] Setor subordinado à outra secretaria
## [6] Recusa
## [7] Não informado
## 7 Levels: Não informado Órgão da administração indireta ... Setor subordinado diretamente à chefia do Executivo
unique(capacities_2$sc_as)
## [1] Secretaria municipal em conjunto com outras políticas
## [2] Secretaria municipal exclusiva
## [3] Setor subordinado diretamente à chefia do Executivo
## [4] Setor subordinado a outra secretaria
## [5] Recusa
## [6] Fundação pública
## [7] Não possui estrutura
## 7 Levels: Fundação pública Não possui estrutura ... Setor subordinado diretamente à chefia do Executivo
Transformar Secretaria municipal exclusiva = Sim
Outras modalidades = Não
# Transformar Secretaria exclusiva = Sim.
capacities_2 <- capacities_2 %>%
mutate_at(vars(sc_sa:sc_ed),
funs(ifelse(.=="Secretaria municipal exclusiva", "Sim","Não")))
capacities_2 %>%
count(sc_sa, name = "quantidade") %>%
mutate(perc = quantidade/sum(quantidade)*100)
capacities_2 %>%
count(sc_as, name = "quantidade") %>%
mutate(perc = quantidade/sum(quantidade)*100)
capacities_2 %>%
count(sc_ed, name = "quantidade") %>%
mutate(perc = quantidade/sum(quantidade)*100)
Transformar todas as respostas “Sim” = 1;
Todas “Não” = 0
Depois, realizar a contagem e classificar
# Criar dummies 1 = Sim; 0 = Não.
capacities_2 <- capacities_2 %>%
mutate_at(vars(sc_sa:sc_ed), funs(ifelse(.== "Sim", 1, 0)))
# Contar quantidade de "sim" e organizar colunas
capacities_2 <- capacities_2 %>%
mutate(Num_sc = rowSums(select(.,sc_sa:sc_ed))) %>%
relocate(Num_sc, .after = sc_ed)
# Verificar
capacities_2 %>%
count(Num_sc, name = "quantidade") %>%
mutate(perc = quantidade/sum(quantidade)*100)
# Categorizar quantidade de secretarias
capacities_2 <- capacities_2 %>%
mutate(Sc_class = case_when(
Num_sc == 3 ~ "Possui 3",
Num_sc == 2 ~ "Possui 2",
Num_sc == 1 ~ "Possui 1",
Num_sc == 0 ~ "Não possui")) %>%
relocate(Sc_class, .after = Num_sc)
levels_cat <- c("Não possui" ,"Possui 1", "Possui 2","Possui 3")
capacities_2$Sc_class <- ordered(capacities_2$Sc_class,
levels = c(levels_cat))
# Verificar lables
unique(capacities_1$pl_as)
## [1] "Sim" "Não" "Recusa"
unique(capacities_1$pl_sa)
## [1] "Sim" "Não" "Recusa" "Não informado"
unique(capacities_1$pl_ed)
## [1] "Sim" "Não" "Não informado" "Recusa"
# Criar dummies 1 = Sim; 0 = Não.
capacities_2 <- capacities_2 %>%
mutate_at(vars(pl_sa:pl_ed), funs(ifelse(.== "Sim", 1, 0)))
# Contar quantidade de "sim" e organizar colunas
capacities_2 <- capacities_2 %>%
mutate(Num_pl = rowSums(select(.,pl_sa:pl_ed)))%>%
relocate(Num_pl, .after = pl_ed)
# Categorizar quantidade de planos planos
capacities_2 <- capacities_2 %>%
mutate(Pl_class = case_when(
Num_pl == 3 ~ "Possui 3",
Num_pl == 2 ~ "Possui 2",
Num_pl == 1 ~ "Possui 1",
Num_pl == 0 ~ "Não possui")) %>%
relocate(Pl_class, .after = Num_pl)
capacities_2$Pl_class <- ordered(capacities_2$Pl_class,
levels = c(levels_cat))
# Verificar lables
unique(capacities_1$fu_as)
## [1] "Sim" "Não" "Recusa"
unique(capacities_1$fu_sa)
## [1] "Sim" "Recusa" "Não informado" "Não"
unique(capacities_1$fu_ed)
## [1] "Sim" "Não" "Não informado" "Recusa"
# Criar dummies 1 = Sim; 0 = Não.
capacities_2 <- capacities_2 %>%
mutate_at(vars(fu_sa:fu_ed), funs(ifelse(.== "Sim", 1, 0)))
# Contar quantidade de "sim" e organizar colunas
capacities_2 <- capacities_2 %>%
mutate(Num_fu = rowSums(select(.,fu_sa:fu_ed)))%>%
relocate(Num_fu, .after = fu_ed)
# Categorizar quantidade de fundos
capacities_2 <- capacities_2 %>%
mutate(Fu_class = case_when(
Num_fu == 3 ~ "Possui 3",
Num_fu == 2 ~ "Possui 2",
Num_fu == 1 ~ "Possui 1",
Num_fu == 0 ~ "Não possui")) %>%
relocate(Fu_class, .after = Num_fu)
capacities_2$Fu_class <- ordered(capacities_2$Fu_class,
levels = c(levels_cat))
# Verificar lables
unique(capacities_1$chl_as)
## [1] "Sim" "Não" "Recusa"
unique(capacities_1$chl_sa)
## [1] "Sim" "Não" "Recusa" "Não informado"
unique(capacities_1$chl_ed)
## [1] "Não" "Sim" "Não informado" "Recusa"
# Criar dummies 1 = Sim; 0 = Não.
capacities_2 <- capacities_2 %>%
mutate_at(vars(chl_sa:chl_ed), funs(ifelse(.== "Sim", 1, 0)))
# Contar quantidade de "sim" e organizar colunas
capacities_2 <- capacities_2 %>%
mutate(Num_chl = rowSums(select(.,chl_sa:chl_ed)))%>%
relocate(Num_chl, .after = chl_ed)
# Categorizar quantidade de planos planos
capacities_2 <- capacities_2 %>%
mutate(Chl_class = case_when(
Num_chl == 3 ~ "Possui 3",
Num_chl == 2 ~ "Possui 2",
Num_chl == 1 ~ "Possui 1",
Num_chl == 0 ~ "Não possui")) %>%
relocate(Chl_class, .after = Num_chl)
capacities_2$Chl_class <- ordered(capacities_2$Chl_class,
levels = c(levels_cat))
# Assistência Social
levels(capacities_2$consor_as)
## [1] "Não" "Não informado" "Recusa" "Sim"
levels(capacities_2$consor_ed)
## [1] "Não" "Não informado" "Recusa" "Sim"
levels(capacities_2$consor_sa)
## [1] "Não" "Não informado" "Recusa" "Sim"
capacities_2 <- capacities_2 %>%
mutate_at(vars(consor_ed:consor_as),
funs(ifelse(.== "Sim", 1, 0)))
# Contar quantidade de "sim" e organizar colunas
capacities_2 <- capacities_2 %>%
mutate(Num_consor = rowSums(select(.,consor_ed:consor_as)))%>%
relocate(Num_consor, .after = consor_as)
# Categorizar quantidade de planos planos
capacities_2 <- capacities_2 %>%
mutate(Consor_class = case_when(
Num_consor == 3 ~ "Possui 3",
Num_consor == 2 ~ "Possui 2",
Num_consor == 1 ~ "Possui 1",
Num_consor == 0 ~ "Não possui")) %>%
relocate(Consor_class, .after = Num_consor)
capacities_2$Consor_class <- ordered(capacities_2$Consor_class,
levels = c(levels_cat))
capacities_2 <- capacities_2 %>%
mutate(ser_sa_pop = ser_sa*10000/populacao,
ser_ed_pop = ser_ed*10000/populacao,
ser_as_pop = ser_as*10000/populacao,
total_ser_por_10mil_hab = ser_sa_pop + ser_ed_pop + ser_as_pop,
total_ser_por_10mil_hab = round(total_ser_por_10mil_hab)) %>%
relocate(ser_sa:ser_ed, .after = Consor_class ) %>%
relocate(ser_sa_pop:total_ser_por_10mil_hab, .after = ser_ed)
#Verificar quantiles
quantile(capacities_2$idhm)
## 0% 25% 50% 75% 100%
## 0.418 0.594 0.657 0.710 0.854
min(capacities_2$idhm)
## [1] 0.418
max(capacities_2$idhm)
## [1] 0.854
# 0% 25% 50% 75% 100%
# 0.418 0.594 0.657 0.710 0.854
capacities_2 <- capacities_2 %>%
mutate(idhm_quintil = case_when(
idhm <= 0.418 ~ "primeiro",
idhm >= 0.419 & idhm <= 0.594 ~ "segundo",
idhm >= 0.595 & idhm <= 0.657 ~ "terceiro",
idhm >= 0.658 & idhm <= 0.710 ~ "quarto",
idhm >= 0.711 ~ "quinto"))
levels_idhm = c("primeiro", "segundo", "terceiro", "quarto", "quinto")
capacities_2$idhm_quintil <- ordered(capacities_2$idhm_quintil,
levels = c(levels_idhm))
capacities_3 <- capacities_2
capacities_3 %>%
datatable(extensions = 'Buttons',
rownames = F,
options = list(dom = 'Blfrtip',
buttons = c('csv', 'excel'),
autoFill = TRUE,
fixedHeader = TRUE,
autowidth = TRUE,
paging = F,
scrollX = TRUE,
scrollY = "400px"))
# Verificar existência de NAs
DataExplorer::plot_missing(capacities_3)
# NA - presentes apenas na quantidade de servidores
# 1,46% dos casos está com NA. Excluindo esses, o número de municípios decai para 4.844 (86% do total)
capacities_3 <- capacities_3 %>%
drop_na(total_ser_por_10mil_hab)
DataExplorer::plot_missing(capacities_3)
# Uso privado para configurações
setwd("C:/r_files/my_academic_projects/capacidades/capacitties")
#save.image("capacities_raw_data_3.RData")
#load("capacities_raw_data_3.RData")
capacities_4 <- capacities_3
As regressões foram feitas com a função vglm do pacote ‘VGAM’ e os argumentos family = cumulative(parallel = T, reverse = T)
#capacities_4 %>% glimpse()
olr_brasil <- vglm(idhm_quintil ~ log(pib_per_cap) +
Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,
data = capacities_4, family = cumulative(parallel = T, reverse = T))
summary(olr_brasil)
##
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl +
## Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,
## family = cumulative(parallel = T, reverse = T), data = capacities_4)
##
## Pearson residuals:
## Min 1Q Median 3Q Max
## logitlink(P[Y>=2]) -39.89 0.002594 0.006031 0.01557 0.06668
## logitlink(P[Y>=3]) -42.78 0.008293 0.113751 0.41665 38.99648
## logitlink(P[Y>=4]) -412.20 -0.405759 0.032265 0.41417 4.56583
## logitlink(P[Y>=5]) -38.24 -0.431457 -0.101732 -0.03033 7.60692
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept):1 -18.8453973 1.3230257 -14.244 < 0.0000000000000002
## (Intercept):2 -26.9801522 0.8476291 -31.830 < 0.0000000000000002
## (Intercept):3 -29.0622963 0.8635502 -33.654 < 0.0000000000000002
## (Intercept):4 -31.1357760 0.8803494 -35.368 < 0.0000000000000002
## log(pib_per_cap) 2.9991031 0.0649575 46.170 < 0.0000000000000002
## Num_sc -0.1921662 0.0359656 -5.343 0.0000000914
## Num_pl 0.2891329 0.0516971 5.593 0.0000000223
## Num_fu -0.0158319 0.1876479 -0.084 0.933
## Num_chl 0.4699347 0.0844157 5.567 0.0000000259
## total_ser_por_10mil_hab -0.0032277 0.0002291 -14.086 < 0.0000000000000002
## Num_consor 0.2128708 0.0388176 5.484 0.0000000416
##
## (Intercept):1 ***
## (Intercept):2 ***
## (Intercept):3 ***
## (Intercept):4 ***
## log(pib_per_cap) ***
## Num_sc ***
## Num_pl ***
## Num_fu
## Num_chl ***
## total_ser_por_10mil_hab ***
## Num_consor ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]),
## logitlink(P[Y>=4]), logitlink(P[Y>=5])
##
## Residual deviance: 9526.135 on 19365 degrees of freedom
##
## Log-likelihood: -4763.068 on 19365 degrees of freedom
##
## Number of Fisher scoring iterations: 7
##
## Warning: Hauck-Donner effect detected in the following estimate(s):
## 'log(pib_per_cap)'
##
##
## Exponentiated coefficients:
## log(pib_per_cap) Num_sc Num_pl
## 20.0675294 0.8251697 1.3352692
## Num_fu Num_chl total_ser_por_10mil_hab
## 0.9842928 1.5998896 0.9967775
## Num_consor
## 1.2372248
norte <- capacities_4 %>%
filter(regiao == "1 - Norte")
olr_norte <- vglm(idhm_quintil ~ log(pib_per_cap) +
Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,
data = norte, family = cumulative(parallel = T, reverse = T))
summary(olr_norte)
##
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl +
## Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,
## family = cumulative(parallel = T, reverse = T), data = norte)
##
## Pearson residuals:
## Min 1Q Median 3Q Max
## logitlink(P[Y>=2]) -11.6937 0.02193 0.03387 0.05783 0.1616
## logitlink(P[Y>=3]) -8.4486 -0.63428 0.25762 0.66895 2.8873
## logitlink(P[Y>=4]) -5.5986 -0.47224 -0.20576 -0.10789 4.4049
## logitlink(P[Y>=5]) -0.9945 -0.07732 -0.04386 -0.02527 7.3799
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept):1 -18.9932222 3.0281403 -6.272 0.000000000356
## (Intercept):2 -25.2462495 2.9201318 -8.646 < 0.0000000000000002
## (Intercept):3 -27.7822999 2.9885544 -9.296 < 0.0000000000000002
## (Intercept):4 -31.7157388 3.2078216 -9.887 < 0.0000000000000002
## log(pib_per_cap) 2.8119468 0.2863868 9.819 < 0.0000000000000002
## Num_sc -0.2261491 0.1562388 -1.447 0.1478
## Num_pl 0.2758593 0.1983776 1.391 0.1644
## Num_fu -0.3657436 0.4534940 -0.807 0.4200
## Num_chl 0.4201605 0.2369968 1.773 0.0763
## total_ser_por_10mil_hab -0.0013005 0.0007617 -1.707 0.0878
## Num_consor -0.1338285 0.1663035 -0.805 0.4210
##
## (Intercept):1 ***
## (Intercept):2 ***
## (Intercept):3 ***
## (Intercept):4 ***
## log(pib_per_cap) ***
## Num_sc
## Num_pl
## Num_fu
## Num_chl .
## total_ser_por_10mil_hab .
## Num_consor
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]),
## logitlink(P[Y>=4]), logitlink(P[Y>=5])
##
## Residual deviance: 650.6922 on 1461 degrees of freedom
##
## Log-likelihood: -325.3461 on 1461 degrees of freedom
##
## Number of Fisher scoring iterations: 6
##
## Warning: Hauck-Donner effect detected in the following estimate(s):
## '(Intercept):4'
##
##
## Exponentiated coefficients:
## log(pib_per_cap) Num_sc Num_pl
## 16.6422866 0.7975992 1.3176625
## Num_fu Num_chl total_ser_por_10mil_hab
## 0.6936807 1.5222058 0.9987004
## Num_consor
## 0.8747401
nordeste <- capacities_4 %>%
filter(regiao == "2 - Nordeste")
olr_nordeste <- vglm(idhm_quintil ~ log(pib_per_cap) +
Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,
data = nordeste, family = cumulative(parallel = T, reverse = T))
summary(olr_nordeste)
##
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl +
## Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,
## family = cumulative(parallel = T, reverse = T), data = nordeste)
##
## Pearson residuals:
## Min 1Q Median 3Q Max
## logitlink(P[Y>=2]) -10.4937 -0.71844 -0.52440 1.03456 3.571
## logitlink(P[Y>=3]) -1.3915 -0.16458 -0.10526 -0.07931 10.356
## logitlink(P[Y>=4]) -0.2412 -0.02037 -0.01622 -0.01294 4.921
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept):1 -15.3076153 1.6573870 -9.236 < 0.0000000000000002
## (Intercept):2 -18.9733425 1.7056537 -11.124 < 0.0000000000000002
## (Intercept):3 -22.6630488 1.9535123 -11.601 < 0.0000000000000002
## log(pib_per_cap) 1.7610566 0.1414016 12.454 < 0.0000000000000002
## Num_sc -0.1396979 0.0781658 -1.787 0.0739
## Num_pl 0.4691945 0.1002263 4.681 0.00000285
## Num_fu -0.8371632 0.3278786 -2.553 0.0107
## Num_chl 0.4237167 0.1766163 2.399 0.0164
## total_ser_por_10mil_hab -0.0010412 0.0004301 -2.421 0.0155
## Num_consor 0.1565869 0.0698177 2.243 0.0249
##
## (Intercept):1 ***
## (Intercept):2 ***
## (Intercept):3 ***
## log(pib_per_cap) ***
## Num_sc .
## Num_pl ***
## Num_fu *
## Num_chl *
## total_ser_por_10mil_hab *
## Num_consor *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]),
## logitlink(P[Y>=4])
##
## Residual deviance: 2155.195 on 4712 degrees of freedom
##
## Log-likelihood: -1077.598 on 4712 degrees of freedom
##
## Number of Fisher scoring iterations: 7
##
## Warning: Hauck-Donner effect detected in the following estimate(s):
## '(Intercept):3'
##
##
## Exponentiated coefficients:
## log(pib_per_cap) Num_sc Num_pl
## 5.8185821 0.8696209 1.5987059
## Num_fu Num_chl total_ser_por_10mil_hab
## 0.4329370 1.5276287 0.9989593
## Num_consor
## 1.1695124
centro_oeste <- capacities_4 %>%
filter(regiao == "5 - Centro-Oeste")
olr_centro_oeste <- vglm(idhm_quintil ~ log(pib_per_cap) +
Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,
data = nordeste, family = cumulative(parallel = T, reverse = T))
summary(olr_centro_oeste)
##
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl +
## Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,
## family = cumulative(parallel = T, reverse = T), data = nordeste)
##
## Pearson residuals:
## Min 1Q Median 3Q Max
## logitlink(P[Y>=2]) -10.4937 -0.71844 -0.52440 1.03456 3.571
## logitlink(P[Y>=3]) -1.3915 -0.16458 -0.10526 -0.07931 10.356
## logitlink(P[Y>=4]) -0.2412 -0.02037 -0.01622 -0.01294 4.921
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept):1 -15.3076153 1.6573870 -9.236 < 0.0000000000000002
## (Intercept):2 -18.9733425 1.7056537 -11.124 < 0.0000000000000002
## (Intercept):3 -22.6630488 1.9535123 -11.601 < 0.0000000000000002
## log(pib_per_cap) 1.7610566 0.1414016 12.454 < 0.0000000000000002
## Num_sc -0.1396979 0.0781658 -1.787 0.0739
## Num_pl 0.4691945 0.1002263 4.681 0.00000285
## Num_fu -0.8371632 0.3278786 -2.553 0.0107
## Num_chl 0.4237167 0.1766163 2.399 0.0164
## total_ser_por_10mil_hab -0.0010412 0.0004301 -2.421 0.0155
## Num_consor 0.1565869 0.0698177 2.243 0.0249
##
## (Intercept):1 ***
## (Intercept):2 ***
## (Intercept):3 ***
## log(pib_per_cap) ***
## Num_sc .
## Num_pl ***
## Num_fu *
## Num_chl *
## total_ser_por_10mil_hab *
## Num_consor *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]),
## logitlink(P[Y>=4])
##
## Residual deviance: 2155.195 on 4712 degrees of freedom
##
## Log-likelihood: -1077.598 on 4712 degrees of freedom
##
## Number of Fisher scoring iterations: 7
##
## Warning: Hauck-Donner effect detected in the following estimate(s):
## '(Intercept):3'
##
##
## Exponentiated coefficients:
## log(pib_per_cap) Num_sc Num_pl
## 5.8185821 0.8696209 1.5987059
## Num_fu Num_chl total_ser_por_10mil_hab
## 0.4329370 1.5276287 0.9989593
## Num_consor
## 1.1695124
sudeste <- capacities_4 %>%
filter(regiao == "3 - Sudeste")
olr_sudeste <- vglm(idhm_quintil ~ log(pib_per_cap) +
Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,
data = sudeste, family = cumulative(parallel = T, reverse = T))
summary(olr_sudeste)
##
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl +
## Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,
## family = cumulative(parallel = T, reverse = T), data = sudeste)
##
## Pearson residuals:
## Min 1Q Median 3Q Max
## logitlink(P[Y>=2]) -7.287 0.05029 0.08777 0.1928 16.844
## logitlink(P[Y>=3]) -296.849 -0.26635 0.20975 0.4934 2.085
## logitlink(P[Y>=4]) -25.669 -0.59329 -0.18417 0.6732 5.626
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept):1 -2.248e+01 1.833e+00 -12.261 < 2e-16 ***
## (Intercept):2 -2.513e+01 1.850e+00 -13.586 < 2e-16 ***
## (Intercept):3 -2.740e+01 1.877e+00 -14.600 < 2e-16 ***
## log(pib_per_cap) 2.647e+00 1.368e-01 19.350 < 2e-16 ***
## Num_sc -1.251e-01 6.811e-02 -1.836 0.066322 .
## Num_pl -1.268e-01 9.624e-02 -1.318 0.187562
## Num_fu 3.821e-01 4.467e-01 0.855 0.392340
## Num_chl 6.619e-01 1.780e-01 3.718 0.000201 ***
## total_ser_por_10mil_hab -2.441e-03 4.241e-04 -5.756 8.61e-09 ***
## Num_consor -6.481e-01 9.305e-02 -6.965 3.28e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]),
## logitlink(P[Y>=4])
##
## Residual deviance: 2668.3 on 4211 degrees of freedom
##
## Log-likelihood: -1334.15 on 4211 degrees of freedom
##
## Number of Fisher scoring iterations: 7
##
## Warning: Hauck-Donner effect detected in the following estimate(s):
## 'log(pib_per_cap)'
##
##
## Exponentiated coefficients:
## log(pib_per_cap) Num_sc Num_pl
## 14.1096099 0.8824353 0.8808905
## Num_fu Num_chl total_ser_por_10mil_hab
## 1.4654154 1.9384173 0.9975619
## Num_consor
## 0.5230478
sul <- capacities_4 %>%
filter(regiao == "4 - Sul")
olr_sul <- vglm(idhm_quintil ~ log(pib_per_cap) +
Num_sc + Num_pl + Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,
data = sul, family = cumulative(parallel = T, reverse = T))
summary(olr_sul)
##
## Call:
## vglm(formula = idhm_quintil ~ log(pib_per_cap) + Num_sc + Num_pl +
## Num_fu + Num_chl + total_ser_por_10mil_hab + Num_consor,
## family = cumulative(parallel = T, reverse = T), data = sul)
##
## Pearson residuals:
## Min 1Q Median 3Q Max
## logitlink(P[Y>=2]) -10.246 0.03047 0.04609 0.06672 0.5401
## logitlink(P[Y>=3]) -18.162 0.12385 0.20622 0.41389 1.0257
## logitlink(P[Y>=4]) -8.533 -0.81938 0.20442 0.78411 3.0945
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept):1 -1.951e+01 2.623e+00 -7.441 1e-13 ***
## (Intercept):2 -2.289e+01 2.593e+00 -8.826 < 2e-16 ***
## (Intercept):3 -2.535e+01 2.615e+00 -9.691 < 2e-16 ***
## log(pib_per_cap) 2.654e+00 1.981e-01 13.398 < 2e-16 ***
## Num_sc -2.586e-01 6.915e-02 -3.739 0.000185 ***
## Num_pl 7.322e-02 1.170e-01 0.626 0.531450
## Num_fu -3.294e-01 5.543e-01 -0.594 0.552334
## Num_chl 5.663e-02 2.136e-01 0.265 0.790931
## total_ser_por_10mil_hab -1.497e-03 6.309e-04 -2.373 0.017661 *
## Num_consor 1.601e-01 9.130e-02 1.754 0.079439 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Names of linear predictors: logitlink(P[Y>=2]), logitlink(P[Y>=3]),
## logitlink(P[Y>=4])
##
## Residual deviance: 1829.168 on 3221 degrees of freedom
##
## Log-likelihood: -914.5841 on 3221 degrees of freedom
##
## Number of Fisher scoring iterations: 5
##
## Warning: Hauck-Donner effect detected in the following estimate(s):
## 'log(pib_per_cap)'
##
##
## Exponentiated coefficients:
## log(pib_per_cap) Num_sc Num_pl
## 14.2162048 0.7721609 1.0759669
## Num_fu Num_chl total_ser_por_10mil_hab
## 0.7193436 1.0582629 0.9985041
## Num_consor
## 1.1736696
shape_mun <- geobr::read_municipality(simplified = T)
##
|
| | 0%
|
|=== | 4%
|
|===== | 7%
|
|======== | 11%
|
|========== | 15%
|
|============= | 19%
|
|================ | 22%
|
|================== | 26%
|
|===================== | 30%
|
|======================= | 33%
|
|========================== | 37%
|
|============================= | 41%
|
|=============================== | 44%
|
|================================== | 48%
|
|==================================== | 52%
|
|======================================= | 56%
|
|========================================= | 59%
|
|============================================ | 63%
|
|=============================================== | 67%
|
|================================================= | 70%
|
|==================================================== | 74%
|
|====================================================== | 78%
|
|========================================================= | 81%
|
|============================================================ | 85%
|
|============================================================== | 89%
|
|================================================================= | 93%
|
|=================================================================== | 96%
|
|======================================================================| 100%
shape_estado <- geobr::read_state(simplified = T)
##
|
| | 0%
|
|=== | 4%
|
|===== | 7%
|
|======== | 11%
|
|========== | 15%
|
|============= | 19%
|
|================ | 22%
|
|================== | 26%
|
|===================== | 30%
|
|======================= | 33%
|
|========================== | 37%
|
|============================= | 41%
|
|=============================== | 44%
|
|================================== | 48%
|
|==================================== | 52%
|
|======================================= | 56%
|
|========================================= | 59%
|
|============================================ | 63%
|
|=============================================== | 67%
|
|================================================= | 70%
|
|==================================================== | 74%
|
|====================================================== | 78%
|
|========================================================= | 81%
|
|============================================================ | 85%
|
|============================================================== | 89%
|
|================================================================= | 93%
|
|=================================================================== | 96%
|
|======================================================================| 100%
map <- shape_mun %>%
select(cod_mun = code_muni, geom) %>%
mutate(cod_mun = as.character(cod_mun)) %>%
left_join(capacities_4)
theme_map <- function(){
theme(legend.position = c(0.4, 0.5),
legend.justification = c(1, 1),
legend.background = element_blank(),
plot.title=element_text( hjust=0, vjust=-5, face='bold'))
}
map_sc <- map %>%
ggplot()+
geom_sf(aes(fill = fct_infreq(Sc_class)), color = NA)+
scale_fill_viridis_d(name = "Secretarias", option = "D",
na.value = "gray40",
labels = c("Possui 3",
"Possui 2",
"Possui 1",
"Não possui",
"Não analisados\nAcima de 50.000hab."))+
geom_sf(data=shape_estado, fill=NA, color = "black")+
ggthemes::theme_map()+
theme_map()+
ggtitle("Secretarias exclusivas")
map_pl <- map %>%
ggplot()+
geom_sf(aes(fill = fct_infreq(Pl_class)), color = NA)+
scale_fill_viridis_d(name = "Planos", option = "D",
na.value = "gray40",
labels = c("Possui 3",
"Possui 2",
"Possui 1",
"Não possui",
"Não analisados\nAcima de 50.000hab."))+
geom_sf(data=shape_estado, fill=NA, color = "black")+
ggthemes::theme_map()+
theme_map()+
ggtitle("Planos")
map_fu <- map %>%
ggplot()+
geom_sf(aes(fill = fct_infreq(Fu_class)), color = NA)+
scale_fill_viridis_d(name = "Fundos", option = "D",
na.value = "gray40",
labels = c("Possui 3",
"Possui 2",
"Possui 1",
"Não possui",
"Não analisados\nAcima de 50.000hab."))+
geom_sf(data=shape_estado, fill=NA, color = "black")+
ggthemes::theme_map()+
theme_map()+
ggtitle("Fundos")
map_chl <- map %>%
ggplot()+
geom_sf(aes(fill = fct_infreq(Chl_class)), color = NA)+
scale_fill_viridis_d(name = "Conselhos", option = "D",
na.value = "gray40",
labels = c("Possui 3",
"Possui 2",
"Possui 1",
"Não possui",
"Não analisados\nAcima de 50.000hab."))+
geom_sf(data=shape_estado, fill=NA, color = "black")+
ggthemes::theme_map()+
theme_map()+
ggtitle("Conselhos")
mapas <- gridExtra::grid.arrange(map_sc, map_pl, map_fu, map_chl, ncol = 2)
mapas
## TableGrob (2 x 2) "arrange": 4 grobs
## z cells name grob
## 1 1 (1-1,1-1) arrange gtable[layout]
## 2 2 (1-1,2-2) arrange gtable[layout]
## 3 3 (2-2,1-1) arrange gtable[layout]
## 4 4 (2-2,2-2) arrange gtable[layout]
#